﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Quebrado
{
    public class Quebrado
    {
        private int n; //numerador
        private int d; //denominador

        public Quebrado(int numerador)
        {
            this.constructor(numerador, 1);
        }

        public Quebrado(int numerador, int denominador)
        {
            this.constructor(numerador, denominador);
        }

        public Quebrado(Quebrado q)
        {
            this.constructor(q.Numerador, q.Denominador);
        }

        private void constructor(int numerador, int denominador)
        {
            this.n = numerador;
            this.d = denominador;
        }

        public int Numerador
        {
            get
            {
                return (this.n);
            }
        }

        public int Denominador
        {
            get
            {
                return (this.d);
            }
        }

        public bool multiplica(Quebrado q)
        {
            try
            {
                this.n = this.n * q.Numerador;
                this.d = this.d * q.Denominador;

                simplificar();

                return true;
            }
            catch
            {
                return false;
            }
        }

        public bool divide(Quebrado q)
        {
            try
            {
                this.n = this.n * q.Denominador;
                this.d = this.d * q.Numerador;

                simplificar();

                return true;
            }
            catch
            {
                return false;
            }
        }

        public bool suma(Quebrado q)
        {
            try
            {
                if (q.Denominador != this.d)
                {
                    this.n = this.n * q.Denominador + q.Numerador * this.d;
                    this.d = this.d * q.Denominador;
                }
                else
                {
                    this.n = this.n + q.Numerador;
                }

                simplificar();

                return true;
            }
            catch
            {
                return false;
            }
        }

        public bool resta(Quebrado q)
        {
            try
            {
                if (q.Denominador != this.d)
                {
                    this.n = this.n * q.Denominador - q.Numerador * this.d;
                    this.d = this.d * q.Denominador;
                }
                else
                {
                    this.n = this.n - q.Numerador;
                }

                simplificar();

                return true;
            }
            catch
            {
                return false;
            }
        }

        private int mcd(int num, int den)
        {
            int u = Math.Abs(num);
            int v = Math.Abs(den);

            if (v == 0)
            {
                return u;
            }

            int r;

            while (v != 0)
            {
                r = u % v;
                u = v;
                v = r;
            }

            return u;
        }

        private void simplificar()
        {
            int dividir = mcd(this.n, this.d);
            this.n /= dividir;
            this.d /= dividir;
        }

        public Int32 NUMERADOR
        {
            get { return n; }
        }

        public Int32 DENOMINADOR
        {
            get { return d; }
        }

        public Double VALORREAL
        {
            get { return System.Convert.ToDouble(n / d); }
        }
    }
}
